package br.unipar.blog.manager.usuario.impl;

import br.unipar.blog.manager.AbstractUniparManager;
import br.unipar.blog.entity.Usuario;
import br.unipar.blog.manager.usuario.CadastroUsuarioManager;
import java.util.List;
import javax.persistence.NoResultException;
import static com.google.code.liquidform.LiquidForm.*;
import org.springframework.transaction.annotation.Transactional;

public class JpaCadastroUsuarioManagerImpl extends AbstractUniparManager implements CadastroUsuarioManager {

    @Override
    @Transactional(readOnly=false)
    public void salvar(final Usuario usuario) {
        if (usuario.getId() == null) {
            entityManager.persist(usuario);
        } else {
            entityManager.merge(usuario);
        }
    }

    @Override
    @Transactional(readOnly=true)
    public Usuario buscarPeloEmail(final String email) {
        Usuario u = alias(Usuario.class, "u");
        String qlString = select(u).from(Usuario.class).as(u).where(eq(u.getEmail(), email)).toString();
        try {
            return (Usuario) entityManager.createQuery(qlString).getSingleResult();
        } catch (NoResultException e) {
            return null;
        }
    }

    @Override
    public List<Usuario> buscarParcialPeloEmailOuNome(String emailNome) {
        Usuario u = alias(Usuario.class, "u");
        String qlString = select(u).from(Usuario.class).as(u).where(
                like(u.getEmail(), String.format("*%s*", emailNome))
                .or(like(u.getNome(), String.format("*%s*", emailNome)))
        ).toString();
        return entityManager.createQuery(qlString).getResultList();
    }
    
}
